package com.artazapedidos.view;

import com.artazapedidos.persistence.Formado;
import com.artazapedidos.persistence.Pedido;
import com.artazapedidos.persistence.Producto;
import com.artazapedidos.persistence.Usuario;
import com.artazapedidos.service.FormadoService;
import com.google.appengine.api.datastore.Key;
import com.artazapedidos.service.PedidoService;
import com.artazapedidos.service.UsuarioService;
import com.artazapedidos.view.utils.MessageProvider;
import java.util.*;
import javax.annotation.PostConstruct;
import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import javax.faces.model.SelectItem;
import javax.servlet.http.HttpServletRequest;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Required;
import org.springframework.binding.message.MessageBuilder;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;
import org.springframework.webflow.execution.RequestContext;

@Controller
@Scope("request")
public class PedidoController {

    UsuarioService usuarioService;
    FormadoService formadoService;
    PedidoService pedidoService;
    Pedido mi_pedido;
    String cadena_pedido;
    Producto mi_producto;

    public void setMi_pedido(Pedido mi_pedido) {
        this.mi_pedido = mi_pedido;
    }

    public void setCadena_pedido(String cadena_pedido) {
        this.cadena_pedido = cadena_pedido;
    }

    @PostConstruct
    public void iniciar() {
        mi_pedido = new Pedido();
        mi_producto = new Producto();
    }

    public void setMi_producto(Producto mi_producto) {
        this.mi_producto = mi_producto;
    }

    public Pedido getMi_pedido() {
        return mi_pedido;
    }

    @Required
    @Autowired
    public void setPedidoService(PedidoService pedidoService) {
        this.pedidoService = pedidoService;
    }

    @Required
    @Autowired
    public void setUsuarioService(UsuarioService usuarioService) {
        this.usuarioService = usuarioService;
    }

    @Required
    @Autowired
    public void setFormadoService(FormadoService formadoService) {
        this.formadoService = formadoService;
    }

    public Pedido CrearPedido(String fecha) {

        Pedido mipedido = new Pedido(fecha);
        this.pedidoService.crearPedido(mipedido);
        return mipedido;
    }

    public void anadir(Pedido p,RequestContext context) {

        FacesMessage msg = null;



        Usuario u = usuarioService.getCurrentUser();
        System.out.println(p.getUsuario_que_pide());
        System.out.println("estamos pidiendo la gely es boba");
        System.out.println("gelyyy: " + mi_producto.getNombre());


        Formado f = p.crearFormado();

        f.setPedido(p);
        formadoService.create(f);
        System.out.println(" antes key del formado:  "+f.getId_estaformado());
        f.setProducto(mi_producto.getId_producto());
        
       
        p.setPrecio(p.getPrecio()+mi_producto.getPrecio());
        pedidoService.update(p);
        if(!p.getContenido().contains(f)){
        p.getContenido().add(f);
        pedidoService.update(p);
        }
        System.out.println(p.getContenido().size());
        System.out.println("Desde el pedido: "+p.getContenido().get(p.getContenido().size()-1).getId_estaformado());
        context.getFlowScope().put("precio",p.getPrecio());
         msg = new FacesMessage(FacesMessage.SEVERITY_INFO, MessageProvider.getValue("correcto"), MessageProvider.getValue("producto_añadido"));
        FacesContext.getCurrentInstance().addMessage(null, msg);
    }

    public Pedido hacerPedido() {
        Usuario u = usuarioService.getCurrentUser();
        Pedido pedido = new Pedido();
        pedido.setUsuario_que_pide(u.getUsername());
        pedidoService.crearPedido(pedido);
        u.getPedidos_usuario().add(pedido.getId_pedido());
        usuarioService.update(u);
        System.out.println(pedido.getId_pedido());
        return pedido;

    }
}
